package org.pupil.stack;

import java.util.LinkedList;
import java.util.Queue;

/**
 * @Description: 使用队列实现栈   leetcode：https://leetcode.cn/problems/implement-stack-using-queues/description
 * 核心：入栈时，新元素添加到队尾，然后把入栈的队列元素全部进行出队后再入队，这样顺序就符合栈的需求
 * @Author: pupil
 * @Date: 2024/08/04 下午 2:44
 */
public class MyStack {
    private Queue<Integer> queue;

    public MyStack() {
        queue = new LinkedList<Integer>();
    }

    // 入栈
    public void push(int x) {
        // 获取入栈前队列的长度
        int n = queue.size();
        // 先往队列中添加元素
        queue.offer(x);
        // 循环出队再进队
        for (int i = 0; i < n; i++) {
            queue.offer(queue.poll());
        }
    }

    // 出栈
    public int pop() {
        return queue.poll();
    }

    // 获取栈顶元素
    public int top() {
        return queue.peek();
    }

    // 判断栈是否为空
    public boolean empty() {
        return queue.isEmpty();
    }

}
